package com.itheima.domain;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.math.BigDecimal;
import java.util.Date;
@Document(indexName = "product_index")
public class Product {
    @Id
    @Field(type = FieldType.Keyword)
    private Integer productId;             // 商品ID，主键，自增

    @Field(type = FieldType.Keyword)
    private Integer userId;               // 发布者ID
    // 分类ID：精确匹配（比如按分类筛选），不分词

    @Field(type = FieldType.Keyword)
    private Integer categoryId;
    // 商品标题：需要分词（比如搜索“苹果手机”能匹配到），用中文分词器（如ik）// 分类ID

    @Field(type =FieldType.Text,analyzer = "ik_max_word",searchAnalyzer ="ik_smart" )
    private String title;                 // 商品标题

    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_smart")
    private String description;           // 商品详情描述

    // 价格：数值类型（支持范围查询，如“价格>100且<500”）
    @Field(type = FieldType.Double)
    private BigDecimal price;             // 售价

    // 原价：同上，数值类型
    @Field(type = FieldType.Double)
    private BigDecimal originalPrice;     // 原价

    // 成色：精确匹配（比如筛选“全新”商品），不分词
    @Field(type = FieldType.Keyword)
    private Integer conditionLevel;       // 成色：1-全新,2-几乎全新,3-轻微使用痕迹,4-明显使用痕迹,5-需要维修

    // 图片URL：仅存储，不需要搜索，用Keyword（不分词，精确存储）
    @Field(type = FieldType.Keyword, index = false) // index=false表示不创建索引，不参与搜索
    private String imageUrl;              // 商品图片URL

    // 商品状态：精确匹配（比如筛选“在售”商品），不分词
    @Field(type = FieldType.Keyword)
    private Integer status;               // 商品状态：0-下架,1-在售,2-已售出,3-已删除

    // 创建时间：日期类型（支持范围查询，如“近7天发布的商品”）
    @Field(type = FieldType.Date, format = {DateFormat.custom}, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;              // 创建时间

    // 更新时间：同上，日期类型
    @Field(type = FieldType.Date, format = {DateFormat.custom}, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;              // 更新时间


    //专用于我的商品页面查看订单
    @Field(type = FieldType.Keyword, index = false)
    private Integer orderId;

    public Product() {
    }

    public Integer getOrderId() {
        return orderId;
    }

    public void setOrderId(Integer orderId) {
        this.orderId = orderId;
    }

    public Integer getProductId() {
        return productId;
    }

    public void setProductId(Integer productId) {
        this.productId = productId;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public Integer getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public BigDecimal getOriginalPrice() {
        return originalPrice;
    }

    public void setOriginalPrice(BigDecimal originalPrice) {
        this.originalPrice = originalPrice;
    }

    public Integer getConditionLevel() {
        return conditionLevel;
    }

    public void setConditionLevel(Integer conditionLevel) {
        this.conditionLevel = conditionLevel;
    }

    public String getImageUrl() {
        return imageUrl;
    }

    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
